Г Л А В А 6

WWW CGI ИНТЕРФЕЙС ДЛЯ LDBF


Данный параграф подразумевает, что Вы знакомы с World Wide Web и имеете понятие об языке HTML и установке WWW сервера. Если нет, мы настоятельно рекомендуем Вам обратиться к соответсвующей литературе для более ясного понимания описанных ниже возможностей LDBF.

Для обеспечения доступа к LDBF серверу из среды WWW используются программы ldbfcgi и ldbfdcgi. Они реализуют стандартный интерфейс CGI для доступа к элементам WWW форм и вывода информации на броузер клиента. ldbfdcgi отличается от ldbfcgi тем, что использует разделяемую память для доступа к серверу, расположенному на одной с ldbfdcgi машине. Данные программы выполняют S-Lang скрипты, в которых Вы можете, используя LDBF API извлекать данные из таблиц сервера и отсылать их клиенту WWW, а также получать информацию введенную клиентом WWW с помощью форм, написанных на языке HTML.

ldbfcgi(ldbfdcgi) можно вызывать из командной строки,в этом случае они используются как интерпретатор SLang.

Вызов выглядит следующим образом:

ldbfcgi "script.sl?parameters"

Параметры будут находится в переменной query_string. Если в скрипте есть синтаксическая ошибка,информация о ней выдается в файл /tmp/ldbfcgi.log

Дополнительно к стандартному набору команд доступа к LDBF серверу, в скриптах, выполняемых ldbfcgi и ldbfdcgi добавлено несколько специфичных для HTML команд:

Возвращает значение элемента HTML формы item. Возвращаемое значение является строковой переменной;

выводит строку клиенту WWW на его броузер.

выводит строку в файл /tmp/ldbfcgi.log, который находится в том же каталоге откуда был запущен сервер.

Возвращает 1 если подсоединенный пользователь удовлетворяет маске,указанной параметром host.Данная функция работает только в скриптах, выполняемых прораммами ldbfcgi,ldbfcdgi.

Пример: if(ldbfCheckRemote("*kharkov.ua")) {
....
}

Данная функция устанавливает идентификатор сервера,с которым требуется соединение.Данная функция используется в скритах,выполняемых с помощью программы ldbfdcgi^которая использует разделяемую память для соединения с сервером.В качестве параметра необходимо указать ID сервера, с которым он был звпущен или 0 для значения по умолчанию.Если сервер,например, был запущен как:

ldbfd -i956

то Вам надо вызвать функцию в виде
ldbfServerID(956);

В строке 'str' ищется значение переменной 'Var', которое может быть одним из элементов списка 'var_list'. Элементы в списке располагаются через запятую. Функция возвращает значение найденного элемента.

Пример:

% Переменная 'date' после выполнения функции будет

% содержать строку 'date'

date = ldbfGetHTMLValue("<INPUT TYPE=\"text\"NAME=\"date\"VALUE=\"\">",

"NAME","date,name,zip,address")

В строке 'str' изменяется значение переменной 'Var', которое может быть одним из элементов списка 'var_list'. Элементы в списке располагаются через запятую. Функция возвращает строку 'str' c измененным значением 'Var'. Если 'Var' не найдена, возвращается не измененная строка.

Пример:

% Изменяем значение 'VALUE'.

ldbfRelaceHTMLValue("<INPUTTYPE=\"text\"

NAME=\"name\"

VALUE=\"\">","VALUE","JohnSmith"));

% Фунция возвратит строку

% <INPUTTYPE="text"NAME="name"VALUE="JohnSmith">

В строке 'str' удаляется переменная 'Var' вместе со своим значением. Функция возвращает строку 'str'. Если 'Var' не найдена, возвращается не измененная строка.

Пример:

% Удаляем переменную 'VALUE'

% <INPUTTYPE="text"NAME="name"VALUE="JohnSmith">

ldbfRemoveHTMLValue("<INPUTTYPE=\"text\"

NAME=\"name\"

VALUE=\"\">");

% Функция возвращает строку <INPUT TYPE="text" NAME="name" >

Вставляет строку 'Var' в строку 'str'.

Пример:

% Вставляем значение переменной 'VALUE' в строку

% <INPUT TYPE="text" NAME="name" >

ldbfAddHTMLValue("<INPUT TYPE=\"text\"

NAME=\"name\">","VALUE=\"JohnSmith\"");

%Функция возвращает строку

%<INPUTTYPE="text"NAME="name"VALUE="John Smith">

Возвращает строку, содержащую список полей таблицы 'db'. Имена полей разделены запятыми.

Пример:

variablefld_list=ldbfGetFieldList("personal");

% 'fld_list' может содержать"name,address,zip,country,phone"

если HTML-форма предназначена для ввода данных в таблицу 'db' и имена строк ввода соответствуют именам полей данной таблицы, то используя эту функцию можно получить данные ввода в виде пригодном для использования в функциях ldbfInsert() и ldbfUpdate().

Пример HTML страницы:

% <INPUTTYPE="text"NAME="name"VALUE="John">

% <INPUT TYPE="text" NAME="address" VALUE="New York">

% <INPU TYPE="text"NAME="zip"VALUE="">

% <INPUT TYPE="text" NAME="phone" VALUE="2345678">

% Изменение таблицы "personal".

% После вызова,ldbfConstructValues() возвратит строку:

% "John,New York,,2345678"

% Исползуя ldbfUpdate(), изменяем значения таблицы

% "personal"

ldbfUpdate("personal",ldbfGetFieldsList("personal"),

ldbfConstructValues("personal"));

И переменных:

  • server_protocol - используемый протокол;
  • user_agent - используемый броузер клиента;
  • gateway_interface - используемый интерфейс;
  • server_software - версия сервера;
  • request_method - метод доступа;
  • server_port - порт, по которому происходит связь;
  • content_length - длина передаваемых данных по методу 'POST'
  • remote_host - имя хоста клиента;
  • remote_addr - IP адрес хоста клиента;
  • query_string - данные, передаваемые по методу 'GET', а также параметры;
  • path_translated - имя CGI программы с параметрами.

Для вызова S-Lang скрипта и доступа к LDBF серверу необходимо произвести следующие установки:

- переписать файл ldbfcgi (ldbfdcgi) в каталог, где хранятся все CGI программы Вашего WWW сервера. Для NCSA и Apache httpd это каталог ~/cgi-bin.

- переписать Ваши S-Lang скрипты в этот же каталог или в каталог, где расположены HTML страницы. Для NCSA и Apache httpd это каталог ~/htdocs.

-создать на Вашей WWW странице ссылку на ldbfcgi(ldbfdcgi) программу и передать ей в качестве параметра имя S-Lang скрипта. Например, если скрипты расположены в каталоге cgi-bin то вызов будет выглядеть:

<P><A HREF="http://localhost/cgi-bin/ldbfcgi?index.sl"> "Index.</A>

Если же скрипты расположены в каталоге где находяться HTML страницы, т.е. в каталоге ~/htdocs то вызов скрипта выглядит по другому:

<P><A HREF="http://localhost/cgi-bin/ldbfcgi/index.sl"> "Index.</A>

Если скрипт находится в подкаталоге scripts:

<P><A HREF="http://localhost/cgi-bin/ldbfcgi/scripts/index.sl"> "Index.</A>

Пример страницы, в которой клиент вводит данные, а затем эти данные передаются серверу для сохранения:

<TITLE>Registration</TITLE>

<HEAD>Guest registration</HEAD>

<P>

<FORM method=POST

ACTION="http://localhost/cgi-bin/ldbfcgi?regist.sl">

<P><H3>Enter your name </H3>

Name: <INPUT TYPE="text" NAME="name" VALUE="" MAXLENGTH="32">

<H3><U>Where you from?</U></H3>

<H4><I>Select location, please:</I></H4><OL>

<INPUT TYPE="radio" CHECKED NAME="loc" VALUE="sng"> ex-USSR

INPUT TYPE="radio" NAME="loc" VALUE="foren"> Other countries </OL>

<INPUT type="submit" VALUE="Save!"></FORM>

После нажатия кнопки "Save!" сервер запустит скрипт 'regist.sl'. Например,он может выглядеть следующим образом:

   variable name,location; 
          name =ldbfGetCGIValue("name");  % берем значения 
          location = ldbfGetCGIValue("loc"); 
          if(ldbfConnect("localhost")) { % соединяемся с сервером  
            ldbfInsert("guests","name,location", 
                                               % заносим новую запись 
                   Sprintf("%s,"%s",name,location,2)); 
          } 

или

ldbfInsert ("quest", "name, Location", ldbfConstruct ("quest"));